/**
 * 从左上到右下的方案总数，只能向下或者向右
 * 有些点不能走。
 * 令Dij为从起点到ij的方案总数
 * 不能走的点设为0，起点设为1
 * Dij = D[i-1][j] + D[i][j-1]
 */
#include <bits/stdc++.h>
using namespace std;

using llt = long long;
using pii = pair<int, int>;
using vi = vector<int>;

llt const INF = 0x1F2F3F4F5F6F7F8F;
llt const NINF = -INF;

int const DR[] = {-2, -2, -1, 1, 2, 2, 1, -1};
int const DC[] = {-1, 1, 2, 2, 1, -1, -2, -2};

int N, M, X, Y;

vector<vector<int>> Flag;
vector<vector<llt>> D;

void work(){
    cin >> N >> M >> X >> Y;
    Flag.assign(N + 1, vector<int>(M + 1, 0));
    Flag[X][Y] = 1;
    for(int nr,nc,i=0;i<8;++i){
        nr = X + DR[i];
        nc = Y + DC[i];
        if(0 <= nr and nr <= N and 0 <= nc and nc <= M) Flag[nr][nc] = 1;
    }

    D.assign(N + 1, vector<llt>(M + 1, 0LL));
    D[0][0] = 1;
    for(int i=0;i<=N;++i){
        for(int j=0;j<=M;++j){
            if(Flag[i][j]) continue;

            if(i > 0) D[i][j] += D[i - 1][j];
            if(j > 0) D[i][j] += D[i][j - 1];
        }
    }
    cout << D[N][M] << endl;
    return;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int nofkase = 1;
    // cin >> nofkase; 
    while(nofkase--) work();
    return 0;
}
